package com.hsjk.szwj.module.train.service;

import com.hsjk.szwj.framework.common.pojo.PageParam;
import com.hsjk.szwj.framework.common.pojo.PageResult;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminCreateOrUpdateSkuBindReqVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminCreateProductSkuReqVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminCreateProductSpuReqVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminProductSkuPageReqVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminProductSkuPageRespVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminProductSpuDetailRespVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminProductSpuPageReqVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminProductSpuPageRespVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminUpdateProductSkuReqVO;
import com.hsjk.szwj.module.train.controller.admin.vo.AdminUpdateProductSpuReqVO;
import com.hsjk.szwj.module.train.controller.app.vo.product.AllNormalSpuPageReqVO;
import com.hsjk.szwj.module.train.controller.app.vo.product.SpuListRespVO;
import com.hsjk.szwj.module.train.dal.dataobject.product.ProductCategoryDO;
import com.hsjk.szwj.module.train.dal.dataobject.product.ProductSkuBindDO;
import com.hsjk.szwj.module.train.dal.dataobject.product.ProductSkuDO;
import com.hsjk.szwj.module.train.dal.dataobject.product.ProductSpuDO;

import java.util.List;

/**
 * @author ec50n9
 */
public interface IProductService {

    List<ProductCategoryDO> getProductCategoryList();

    PageResult<ProductSpuDO> getNormalProductSpuPageByCategoryId(
            Long categoryId, PageParam pageParam
    );

    PageResult<SpuListRespVO> getNormalProductSpuPage(PageParam pageParam);

    PageResult<SpuListRespVO> getNormalProductSpuPageByCarType(String carType, PageParam pageParam);

    ProductSpuDO getNormalProductSpuById(Long id);

    List<ProductSkuDO> getProductSkuListBySpuId(Long spuId);

    ProductSkuDO getProductSkuById(Long id);
    ProductSkuDO getCourseBindProductSkuById(Long id);

    List<ProductSkuBindDO> getProductSkuBindListBySkuId(Long skuId);
    List<ProductSkuBindDO> getCourseBindProductSkuBindListBySkuId(Long skuId);

    /**
     * 获取商品spu列表
     *
     * @param reqVO
     * @return com.hsjk.szwj.framework.common.pojo.PageResult<com.hsjk.szwj.module.train.controller.admin.vo.AdminProductSpuPageRespVO>
     * @author chenjiawei
     * @date 2023/9/10 1:03 AM
     **/
    PageResult<AdminProductSpuPageRespVO> getProductSpuPageList(AdminProductSpuPageReqVO reqVO);

    /**
     * 根据id获取商品spu详情
     *
     * @param spuId
     * @return com.hsjk.szwj.module.train.controller.admin.vo.AdminProductSpuDetailRespVO
     * @author chenjiawei
     * @date 2023/9/10 1:11 AM
     **/
    AdminProductSpuDetailRespVO getProductSpuDetailById(Long spuId);

    /**
     * 获取商品sku列表
     *
     * @param reqVO
     * @return com.hsjk.szwj.framework.common.pojo.PageResult<com.hsjk.szwj.module.train.controller.admin.vo.AdminProductSkuPageRespVO>
     * @author chenjiawei
     * @date 2023/9/12 12:34 AM
     **/
    PageResult<AdminProductSkuPageRespVO> getProductSkuPageList(AdminProductSkuPageReqVO reqVO);

    /**
     * 创建或更新课程/班型
     *
     * @param reqVO
     * @return java.lang.Boolean
     * @author chenjiawei
     * @date 2023/9/12 12:49 AM
     **/
    Boolean createOrUpdateProductSkuBind(AdminCreateOrUpdateSkuBindReqVO reqVO);

    /**
     * 创建商品Spu
     *
     * @param reqVO
     * @return java.lang.Boolean
     * @author chenjiawei
     * @date 2023/10/5 11:31 PM
     **/
    Boolean createProductSpu(AdminCreateProductSpuReqVO reqVO);

    /**
     * 更新商品Spu
     *
     * @param reqVO
     * @return java.lang.Boolean
     * @author chenjiawei
     * @date 2023/10/5 11:38 PM
     **/
    Boolean updateProductSpu(AdminUpdateProductSpuReqVO reqVO);

    Boolean deleteProductSkuBind(Long id);

    /**
     * 根据商品spuId 查询标签
     *
     * @param spuId
     * @return java.util.List<java.lang.String>
     * @author chenjiawei
     * @date 2023/10/15 11:15 AM
     **/
    List<String> getTagsBySpuId(Long spuId);

    /**
     * 创建商品sku
     *
     * @param reqVO
     * @return java.lang.Boolean
     * @author chenjiawei
     * @date 2023/11/1 11:20 PM
     **/
    Boolean createProductSku(AdminCreateProductSkuReqVO reqVO);

    /**
     * 更新商品sku
     *
     * @param reqVO
     * @return java.lang.Boolean
     * @author chenjiawei
     * @date 2023/11/1 11:22 PM
     **/
    Boolean updateProductSku(AdminUpdateProductSkuReqVO reqVO);

    /**
     * 删除商品sku
     *
     * @param id
     * @return java.lang.Boolean
     * @author chenjiawei
     * @date 2023/11/1 11:27 PM
     **/
    Boolean deleteProductSku(Long id);
}
